package com.supermap.ar.unity;

import androidx.annotation.Keep;

import java.util.ArrayList;

/**
 * Loader管理器
 * <p>
 *     使用Loader管理器，需确保Unity场景中有对象绑定LoaderManager.cs(默认由SuperMap_IMB_System绑定)
 * </p>
 * @author tanyx 2022年2月28日
 * @version 1.0
 * <br/>SampleCode:<br/>
 * <code>
 *      ILoaderManager.getInstance().add(
 *          //TargetMainLoader implements ILoader
 *          new TargetMainLoader());
 * </code>
 **/
public class ILoaderManager{
    private final String TAG = ILoaderManager.class.getSimpleName();
    private static ILoaderManager iLoaderManager = null;

    private ArrayList<ILoader> iLoaderList;

    /**
     * 构造函数
     */
    public ILoaderManager() {
        iLoaderList = new ArrayList<ILoader>();
    }

    /**
     * 获取实例
     * @return this
     */
    public static ILoaderManager getInstance(){
        if (iLoaderManager == null){
            synchronized (ILoaderManager.class){
                if (iLoaderManager == null){
                    iLoaderManager = new ILoaderManager();
                }
            }
        }
        return iLoaderManager;
    }

    /**
     * 添加loader
     * @param loader loader
     * @return
     */
    public ILoaderManager add(ILoader loader){
        loader.start();
        iLoaderList.add(loader);
        return this;
    }

    /**
     * 获取指定索引的loader
     * @param index
     * @return
     */
    public ILoader get(int index){
        return iLoaderList.get(index);
    }

    /**
     * 移动指定索引的loader
     * @param index
     */
    public void remove(int index){
        iLoaderList.remove(index);
    }

    /**
     * 移除指定loader
     * @param iLoader loader
     */
    public void remove(ILoader iLoader){
        iLoaderList.remove(iLoader);
    }

    /**
     * 清除所有loader
     */
    public void clear(){
        iLoaderList.clear();
    }

    /**
     * 更新
     * unity中调用
     */
    @Keep
    void update() {
        for (ILoader loader:iLoaderList) {
            loader.update();
        }
    }

    /**
     * 销毁
     * unity中调用
     */
    @Keep
    void destroy() {
        for (ILoader loader:iLoaderList) {
            loader.destroy();
        }
    }

}
